package com.yida.gwj.deposit.service;


import com.yida.gwj.deposit.domain.GwjDepositBusinessCommunity;
import com.yida.gwj.deposit.domain.GwjDepositBusinessHouse;
import com.yida.gwj.deposit.domain.dto.split.GwjAllocatedAmountDTO;
import com.yida.gwj.deposit.domain.dto.split.GwjAllocatedAmountScreeningDTO;
import com.yida.gwj.deposit.domain.dto.split.GwjFundsSplitHouseholdRecordHeadDTO;
import com.yida.gwj.deposit.domain.request.GwjCalculateRequest;
import com.yida.gwj.deposit.domain.request.GwjPublicAccountRequest;
import com.yida.gwj.deposit.domain.request.GwjPublicBusinessHouseRequest;
import com.yida.gwj.deposit.domain.request.split.GwjAllocatedAmountRequest;
import com.yida.gwj.deposit.domain.request.split.GwjFundsSplitSaveSubmitRequest;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;

/**
 * 维修资金分户（初始化）（缴存业务管理模块）Service接口
 *
 * @author lqq
 * @date 2023-01-10
 */
public interface IGwjFundsSplitBusinessService {

	/**
	 * 维修资金分户（初始化）（保存）
	 *
	 * @param saveSubmitRequest 请求参数
	 * @return 业务ID
	 */
	Long saveBusiness(GwjFundsSplitSaveSubmitRequest saveSubmitRequest);

	/**
	 * 维修资金分户（初始化）（保存修改）
	 *
	 * @param saveSubmitRequest 请求参数
	 */
	void updateBusiness(GwjFundsSplitSaveSubmitRequest saveSubmitRequest);

	/**
	 * 维修资金分户（初始化）（提交）
	 *
	 * @param saveSubmitRequest 请求参数
	 */
	void submitBusiness(GwjFundsSplitSaveSubmitRequest saveSubmitRequest);

	/**
	 * 金额维护-取消选择
	 *
	 * @param moneyIds 金额ID
	 * @param bizId    业务ID
	 */
	void moneyMaintainCancelSelect(Long[] moneyIds, Long bizId);

	/**
	 * 金额维护-加入选择
	 *
	 * @param moneyIds 业务房屋ID
	 * @param bizId    业务ID
	 */
	void moneyMaintainConfirmSelect(Long[] moneyIds, Long bizId);

	/**
	 * 删页
	 *
	 * @param bizId 业务id
	 */
	void deleteBusinessData(Long bizId);

	/**
	 * 导入小区（删除原有小区、房屋、楼栋、业主、插入新小区信息）
	 *
	 * @param gwjDepositBusinessCommunity 要导入的小区
	 */
	void importCommunity(GwjDepositBusinessCommunity gwjDepositBusinessCommunity);

	/**
	 * 导入楼栋
	 *
	 * @param bizId    业务ID
	 * @param buildIds 要导入的楼栋ID
	 */
	void importBuild(Long bizId, Long[] buildIds);

	/**
	 * 删除业务楼栋（含房屋、业主、修改涉及总户数、总面积）
	 *
	 * @param bizId    业务ID
	 * @param bizBuildIds 业务楼栋ID
	 */
	void deleteBuildData(Long bizId, Long[] bizBuildIds);

	/**
	 * 房屋维护-取消选择
	 *
	 * @param bizHouseIds 业务房屋ID
	 * @param bizId       业务ID
	 */
	void houseMaintainCancelSelect(Long[] bizHouseIds, Long bizId);

	/**
	 * 房屋维护-加入选择
	 *
	 * @param bizHouseIds 业务房屋ID
	 * @param bizId       业务ID
	 */
	void houseMaintainConfirmSelect(Long[] bizHouseIds, Long bizId);

	/**
	 * 删除公用户楼栋
	 *
	 * @param bizBuildIds 业务楼栋ID
	 * @param bizId       业务ID
	 */
	void deletePublicBuild(Long[] bizBuildIds, Long bizId);

	/**
	 * 删除公用户房屋
	 *
	 * @param bizHouseIds 业务楼栋ID
	 * @param bizId       业务ID
	 */
	void deletePublicHouse(Long[] bizHouseIds, Long bizId);

	/**
	 * 创建公用户楼栋
	 *
	 * @param gwjPublicAccountRequest 请求参数
	 */
	void createPublicBuild(GwjPublicAccountRequest gwjPublicAccountRequest);

	/**
	 * 创建公用户房屋
	 *
	 * @param gwjPublicAccountRequest 请求参数
	 */
	void createPublicHouse(GwjPublicAccountRequest gwjPublicAccountRequest);

	/**
	 * 编辑公用户房屋
	 *
	 * @param gwjPublicBusinessHouseRequests 房屋数据
	 */
	void updatePublicHouse(List<GwjPublicBusinessHouseRequest> gwjPublicBusinessHouseRequests);

	/**
	 * 编辑房屋的缴款面积
	 *
	 * @param gwjDepositBusinessHouse 业务房屋
	 * @return 结果
	 */
	boolean updateGwjDepositBusinessHouseDepositSize(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 编辑房屋的补差
	 *
	 * @param gwjDepositBusinessHouse 业务房屋
	 * @return 结果
	 */
	boolean updateGwjDepositBusinessHouseLackMoney(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 缴存日期存入
	 *
	 * @param bizId       业务ID
	 * @param depositTime 缴存日期
	 */
	void updateGwjDepositBusinessHouseDepositTime(Long bizId, Date depositTime);

	/**
	 * 根据标准计算楼栋房屋
	 *
	 * @param gwjCalculateRequest 计算信息
	 */
	void calculateHouse(GwjCalculateRequest gwjCalculateRequest);

	/**
	 * 生成财务流水
	 *
	 * @param bizId 业务ID
	 */
	void genFinancialStatement(Long bizId);

	/**
	 * 财务对账
	 *
	 * @param bizId 业务ID
	 */
	void financeCheck(Long bizId);

	/**
	 * 分摊金额统计
	 *
	 * @param gwjAllocatedAmountRequest 筛选请求
	 * @return /
	 */
	GwjAllocatedAmountDTO allocatedAmount(GwjAllocatedAmountRequest gwjAllocatedAmountRequest);

	/**
	 * 分摊金额统计-筛选
	 *
	 * @param gwjAllocatedAmountRequest 筛选请求
	 * @return /
	 */
	GwjAllocatedAmountScreeningDTO allocatedAmountScreening(GwjAllocatedAmountRequest gwjAllocatedAmountRequest);

	/**
	 * 获取小区分户清册头部详情
	 * @param bizId 业务ID
	 * @return /
	 */
	GwjFundsSplitHouseholdRecordHeadDTO getHouseholdRecordDetail(Long bizId);

	/**
	 * 导入业务房屋信息
	 *
	 * @param file  业务房屋文件
	 * @param bizId 业务ID
	 * @return /
	 * @throws Exception /
	 */
	String importGwjDepositBusinessHouse(MultipartFile file, Long bizId) throws Exception;

}
